当前位置:  开发笔记 > 编程语言 > 正文

使用`std :: string`的显式构造函数得到`char*`并且工作正常

如何解决《使用`std::string`的显式构造函数得到`char*`并且工作正常》经验,为你挑选了1个好方法。

StringBuilder构造函数标记为显式我认为我无法传递,char*但似乎我可以编译就好了.

class StringBuilder {
public:
//    StringBuilder(const char *);
    explicit StringBuilder(std::string s) {}
};

int main() {

    StringBuilder s1("hello");
    StringBuilder s2(std::string("hello"));

}

http://cpp.sh/6uomq



1> Zdeslav Vojk..:

basic_string采用字符指针的构造函数不是explicit:

basic_string( const CharT* s,  Allocator& alloc = Allocator() );

这意味着为函数提供char指针string将隐式创建一个字符串并将其传递给函数.

你是StringBuilder明确的,这意味着它不可能隐式转换stringStringBuilder,即如果你传递string给一个StringBuilder作为参数的函数,它将无法编译.

编辑:如@Revolver_Ocelot所述,您可以将违规构造函数(StringBuilder(const char*))声明为已删除,以防止其被使用.如果你不能使用C++ 11,你只需要声明与private相同的构造函数并省略定义(实现):

class StringBuilder 
{
  public:
    explicit StringBuilder(const std::string& s) {}    

  // for C++11 use this:
    StringBuilder(const char*) = delete;

  // otherwise use this:
  private:
    StringBuilder(const char*); // no implementation
};


而且不允许你可以使用`const char*`来声明已删除的构造函数
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有